<?php
/**
 * Created by PhpStorm.
 * User: 李闯
 * Date: 2020/7/7
 * Time: 13:07
 * Content: 消息
 */

namespace app\admin\controller;
use app\reuse\controller\ResponseJson;
use app\service\ResourceService;
use Redis\Redis;
use think\Db;
use think\facade\Session;

class Notice extends Common
{
    use ResponseJson;

    function __construct()
    {
        parent::__construct();
        // 登录校验
        $this->IsLogin();
    }
    /*
     * @param null
     * @content 通知消息列表
     * @return array
     * */
    function index()
    {
        $type = input("get.type");
        if(input("get.active") == "ajax"){
            #当前时间
            $time = date("Y-m-d H:i:s");
            # 定义listRows
            $listRows = input('post.limit');
            if (empty($listRows)) {
                $listRows = 10;
            }
            # 定义where
            $_where = "type = '$type' and status !=4";
            # 搜索条件
            $searchParams = json_decode(input('post.searchParams'), true);
            if (!empty($searchParams)) {
                # 姓名搜索
                if (!empty($searchParams['title'])) {
                    $_where .= " and title like '%" . $searchParams['title'] . "%'";
                }
            }
            $info = Db::table('notice')
                ->where($_where)
                ->order("id desc")
                ->paginate($listRows, false, ['query' => request()->param()]);
            $notice = $info->toArray();
            foreach ($notice['data'] as $k=>$v){
                if($v['people_type'] == 1){
                    $notice['data'][$k]['people_type'] = "合伙人";
                }else if($v['people_type'] == 2){
                    $notice['data'][$k]['people_type'] = "所有人";
                }else{
                    #查询等级用户
                    $level  = Db::table("notice_level n")->field("(select ml.title from member_level ml where ml.level = n.member_level) level_title")->where("notice_id = '".$v['id']."'")->select();
                    $_levelarray = array();
                    foreach ($level as $lk=>$lv){
                        array_push($_levelarray,$lv['level_title']);
                    }
                    $_levelTitle = implode(',',$_levelarray);
                    $notice['data'][$k]['people_type'] = $_levelTitle;
                }
                if($v['type'] == 1){
                    #当前时间>发送时间  并<下架时间
                    if($info['send_time']< $time ){
                        #状态改为 已发送
                        $notice['data'][$k]['status']=1;

                    }else if($info['send_time']>$time){
                        #当前时间<发送时间  并<下架时间 状态 改为 待发送  待显示
                        $notice['data'][$k]['status']=2;

                    }
                }else{
                    #当前时间>发送时间  并<下架时间
                    if($v['send_time']<$time and  $time<=$v['stop_time']){
                        #状态改为 已发送git
                        $notice['data'][$k]['status']=1;

                    }else if($v['send_time']>$time and  $time<$v['stop_time'] ){
                        #当前时间<发送时间  并<下架时间 状态 改为 待发送  待显示 发送时间<=结束时间
                        $notice['data'][$k]['status']=2;

                    }else{
                        #已结束
                        $notice['data'][$k]['status']=3;
                    }
                }
            }
            return $this->jsonSuccessData($notice);
        }else{
            $this->assign('type',$type);
            return $this->fetch();

        }

    }
    /*
     * @param null
     * @content 通知消息修改
     * @return array
     * */
    function write(){
        #通知消息低
        $notice_id= input("get.id");
        $type= input("get.type");

        if(input("get.active")=="ajax"){
            $info = input("post.");
            $info['update_time'] = date("Y-m-d H:i:s");
            if($info['type'] == 1){
                #当前时间>发送时间  并<下架时间
                if($info['send_time']<$info['create_time'] ){
                    #状态改为 已发送
                    $info['status']=1;

                }else if($info['send_time']>$info['create_time']){
                    #当前时间<发送时间  并<下架时间 状态 改为 待发送  待显示
                    $info['status']=2;

                }
                unset($info['stop_time']);
            }else{
                #用时间判断显示状态
                #当前时间>发送时间  并<下架时间
                if($info['send_time']<$info['update_time'] and  $info['update_time']<$info['stop_time']){
                    #状态改为 已发送
                    $info['status']=1;

                }else if($info['send_time']>$info['update_time'] and  $info['update_time']<$info['stop_time']){
                    #当前时间<发送时间  并<下架时间 状态 改为 待发送  待显示
                    $info['status']=2;

                }else{
                    #已结束
                    $info['status']=3;
                }
            }
            #判断是否查看详情  1查看 2不可查看
            if(!empty($info['is_see'])){
                if($info['is_see'] == 2){
                    #删除详情字段
                    unset($info['content']);
                }
            }
            #是否允许关闭
            if(!empty($info['allow_status'])){
                if($info['allow_status'] =='allow'){
                    #允许
                    $info['allow_status'] = 0;
                }else{
                    #不允许
                    $info['allow_status']= 2;
                }

            }
            Db::table("notice")->where("id = $notice_id")->update($info);
            if($info['type']==3){
                # 如果是首页弹窗  删除前端缓存
                $_redis=new Redis();
                $_redis->hDel('showPop',"showPop");
            }
            if($info['type']==2){
                $_redis=new Redis();
                $_redis->hDel('showPlatForm',"showPlatForm");
            }
            return array("status"=>true,'msg'=>'操作成功');

        }else{
            #查询通知消息
            $notice = Db::table("notice")->where("id = $notice_id")->find();
            #查询member_code
            $member_code = Db::table("notice_news")->where("notice_id = $notice_id")->select();
            $this->assign("member_code",$member_code);
            $this->assign("notice",$notice);
            $this->assign("type",$type);
            $this->assign("id",$notice_id);
            return $this->fetch();
        }

    }
    /*
    * @param null
    * @content 通知消息创建
    * @return array
    * */
    function create(){
        $type= input("get.type");
        if(input("get.active") == "ajax"){
            $_where="";
            #查询通知消息状态 已展示
            $status = Db::table("notice")->field("status")->where("status = 1 and type= '$type'")->find();
            if(!empty($status['status'])){
                return array("status"=>false,'msg'=>'有已展示的消息不能创建新的哦！');

            }else{
                $info = input("post.");
                $info['create_time'] = date("Y-m-d H:i:s");
                if($info['type'] == 1){
                    #当前时间>发送时间  并<下架时间
                    if($info['send_time']<$info['create_time'] ){
                        #状态改为 已发送
                        $info['status']=1;

                    }else if($info['send_time']>$info['create_time']){
                        #当前时间<发送时间  并<下架时间 状态 改为 待发送  待显示
                        $info['status']=2;

                    }
                    unset($info['stop_time']);
                }else{
                    if($info['type']==3){
                        # 如果是首页弹窗  删除前端缓存
                        $_redis=new Redis();
                        $_redis->hDel('showPop',"showPop");
                    }
                    if($info['type']==2){
                        $_redis=new Redis();
                        $_redis->hDel('showPlatForm',"showPlatForm");
                    }
                    #用时间判断显示状态
                    #当前时间>发送时间  并<下架时间
                    if($info['send_time']<$info['create_time'] and  $info['create_time']<$info['stop_time']){
                        #状态改为 已发送
                        $info['status']=1;

                    }else if($info['send_time']>$info['create_time'] and  $info['create_time']<$info['stop_time']){
                        #当前时间<发送时间  并<下架时间 状态 改为 待发送  待显示
                        $info['status']=2;

                    }else{
                        #已结束
                        $info['status']=3;

                    }
                }
                #判断是否查看详情  1查看 2不可查看
                if(!empty($info['is_see'])){
                    if($info['is_see'] == 2){
                        #删除详情字段
                        unset($info['content']);
                    }
                }
                #是否允许关闭
                if(!empty($info['allow_status'])){
                    if($info['allow_status'] =='allow'){
                        #允许
                        $info['allow_status'] = 0;
                    }else{
                        #不允许
                        $info['allow_status']= 2;
                    }

                }
                #判断人群类型的状态
                if($info['people_type'] =='all'){
                    #删除等级字段
                    unset($info['member_level']);
                    #所有人
                    $info['people_type']=2;
                    #获取玩家ID 条件 1账号正常 2 合伙人
                    $_where .= "m.type = 1 or m.type = 2";
                }else if($info['people_type'] =='partner'){
                    #删除等级字段
                    unset($info['member_level']);
                    #合伙人
                    $info['people_type']=1;
                    $_where .= "m.type = 2";

                }else{
                    #等级用户
                    $info['people_type']=3;
                    #用户等级
                    $mebmer_level = $info['member_level'];
                    if(!empty($mebmer_level)){
                        $memberLevel = implode(",",$mebmer_level);
                        $_where .= "m.level in ($memberLevel)";
                    }
                }

                unset($info['member_level']);
                $notice_id = Db::table('notice')->insertGetId($info);
                #查询玩家ID
                $memberCode  = Db::table("member m")->field("code")->where($_where)->select();
                if($notice_id){
                    #添加详情
                    $_arr = array();
                    foreach ($memberCode as $v) {
                        #像数组里插值array_push('数组'值)
                        array_push($_arr, array('notice_id' => $notice_id,  'member_code' => $v['code']));
                    }
                    Db::table('notice_news')->insertAll($_arr);
                    #插入 玩家等级
                    $_level =array();
                    if(!empty($mebmer_level)){
                        foreach ($mebmer_level as $m) {
                            array_push($_level, array('notice_id' => $notice_id, 'member_level' => $m));
                        }

                    }
                    Db::table('notice_level')->insertAll($_level);

                    /*    #删除缓存
                        Session::delete('searchMember');*/
                    return array("status"=>true,'msg'=>'操作成功');
                }else{
                    return array("status"=>false,'msg'=>'提交失败');
                }
            }
        }else{
            #删除缓存
//                Session::delete('searchMember');
            #获取用户等级
            $level = Db::table("member_level")->field("level,title")->select();
            #获取消息类型
            $this->assign("level",$level);
            $this->assign("type",$type);
            return $this->fetch();
        }

    }
    /*
   * @param null
   * @content 通知消息修改
   * @return array
   * */

    function notice_del(){
        $id =input("post.id");
        if(!empty($id)){
            $_redis=new Redis();
            $_redis->hDel('showPop',"showPop");
            $_redis->hDel('showPlatForm',"showPlatForm");
            #状态修改为删除
            Db::table("notice")->where("id = $id")->update(array("status"=>4));
            return array('status'=>true);
        }
    }
    /*
     * @param null
     * @content 查看发送消息的人员
     * @return array
     * */
    function look_member(){
        #用户类型
        $people_type = input("get.people_type");
        #用户等级
        $member_level = input("get.member_level");
        #消息id
        $notice_id = input("get.notice_id");
        if(!empty($notice_id)){
            $_where ='';
            if(!empty($member_level)){
                #按等级查看
                $_where .=" and people_type=$people_type and member_level=$member_level";
            }else{
                if(!empty($people_type)){
                    #所有人  合伙人 查看
                    $_where .=" and people_type=$people_type";
                }
            }
            #查询用户信息
            $member = Db::table("notice n")
                ->field("m.*")
                ->join("notice_news nn","nn.notice_id = n.id")
                ->join("member m",'m.code = nn.member_code')
                ->where("n.id = $notice_id ".$_where)->select();
            if(!empty($member)){
                $str =null;
                #全部
                foreach ($member as $k=>$m){
                    $name = $m['name'];

                    $str .=" <div style=\"margin-top: 50px;\"> <div style=\"margin-top:-8px;letter-spacing:8px;width:80px;\"><span class=\"layui-badge  layui-bg-green\">$name</span></div></div>";
                }
                return array("status"=>true,'str'=>$str);

            }else{
                return array('status'=>false,'msg'=>"暂无人员信息");
            }
        }

    }
}
